// 给你一个数组 events，其中 events[i] = [startDayi, endDayi] ，
// 表示会议 i 开始于 startDayi ，结束于 endDayi 。
// 你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意，一天只能参加一个会议。
// 请你返回你可以参加的 最大 会议数目。

/**
 * @param {number[][]} events
 * @return {number}
 */
////////超时--------
// var maxEvents = function(events) {
//     events.sort((a, b)=>{
//         return a[1] - b[1];
//     });
//     let set = new Set();
//     for(let i = 0; i < events.length; i++) {
//         let left = events[i][0];
//         let right = events[i][1];
//         for(let j = left; j <= right; j++) {
//             if (!set.has(j)) {
//                 set.add(j);
//                 break;
//             }
            
//         }
//     }
//     return set.size;
// };

////---------------------参考大佬思路------------------
//////////要参加更多的会议，就需要先参加那些结束时间早的会议
var maxEvents = function(events) {
    ///把开始时间想相同的排序在一起
    events.sort((a, b)=>{
        return a[0] - b[0];
    });
    let result = 0, len = events.length, quene = [];
    //let start = events[0][0];
    let i = 0;
    for(let index = 1; index <= 100000; index++) {
        //把开始时间相同的会议的结束时间放一起
        while(i < len && events[i][0] === index) {
            quene.push(events[i][1]);
            i++;
        }
        ///从中选出结束时间最早的
        while(quene.length > 0 && quene[quene.length - 1] < index) {
            quene.pop();
        }
        if(quene.length > 0) {
            quene.pop();
            result++;
        }
    }
    return result;
};
console.log(maxEvents([[1,2],[2,3],[3,4],[1,2]]));

